
#ifndef __SEPMOL_H__
#define __SEPMOL_H__

#include "sepmisc.h"
#include "sepstrct.h"

FILE *sep_set_file_pointer(FILE *fptr, const char *section);


void sep_read_bonds_top(sepatom *aptr, sepmolinfo *ptr, const char *file, int npart, char opt);
void sep_read_angles_top(sepmolinfo *ptr, const char *file, char opt);
void sep_read_dihedrals_top(sepmolinfo *ptr, const char *file, char opt);

void sep_read_topology_file(sepatom *aptr, sepsys *sys, const char *file, int npart, char opt);

void sep_free_bonds(sepmolinfo *ptr);
void sep_free_angles(sepmolinfo *ptr);
void sep_free_dihedrals(sepmolinfo *ptr);

void sep_stretch_harmonic(sepatom *aptr, int type, const double lbond, const double ks, 
			  sepsys *sys, sepret *ret);

void sep_FENE(sepatom *aptr, int type, sepsys *sys, sepret *ret);

void sep_angle_cossq(sepatom *ptr, int type, const double angle0, const double k, 
		     sepsys *sys, sepret *ret);

void sep_torsion_Ryckaert(sepatom *ptr, int type, const double g[6],  sepsys *sys, sepret *ret);

sepmol *sep_init_mol(sepatom *atom, sepsys *sys);
void sep_free_mol(sepmol *ptr, sepsys *sys);

void sep_mol_cm(seppart *ptr, sepmol *mol, sepsys sys);
void sep_mol_velcm(seppart *atom, sepmol *mol, sepsys sys);

void sep_mol_spin(sepatom *atom, sepmol *mol, sepsys sys, int opt);

void sep_save_mol_config(sepatom *atoms, sepmol *mol, 
			 double time, const char *file, sepsys sys);

double sep_average_bondlengths(int type, sepsys *sys);

void sep_eval_mol_pressure_tensor(sepatom *atoms, sepmol *mols, sepret *ret, sepsys sys);
void sep_eval_couple_tensor(sepatom *atoms, sepmol *mols, sepret *ret, sepsys sys);

void sep_mol_dipoles(seppart *atom, sepmol *mol, sepsys sys);
double sep_calc_mol_temp(sepatom *atoms, sepmol *mols, sepsys sys);

void sep_calc_mol_ete(sepatom *atoms, sepmol *mols, 
		      char type, unsigned a, unsigned b, 
		      sepsys sys);
void sep_mol_eval_xtrue(seppart *ptr, sepmol *mol, sepsys sys);

int sep_count_mol_type(sepmol *mols, const char type, sepsys sys);


void sep_write_molconf(seppart *atoms, sepmol *mols, 
		       const char *file, sepsys sys);
void sep_mol_write_config(seppart *atoms, sepmol *mols, sepsys sys);


void sep_eval_dipole_flux_tensor(double **R, sepatom *atoms, sepmol *mols,
				 sepsys sys);
#endif
